{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from random import random, choice\n",
    "from core import Agent\n",
    "from gym import Env\n",
    "import gym\n",
    "from gridworld import WindyGridWorld, SimpleGridWorld\n",
    "from utils import str_key, set_dict, get_dict\n",
    "from utils import epsilon_greedy_pi, epsilon_greedy_policy\n",
    "from utils import greedy_policy, learning_curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class SarsaAgent(Agent):\n",
    "    def __init__(self, env:Env, capacity:int = 20000):\n",
    "        super(SarsaAgent, self).__init__(env, capacity)\n",
    "        self.Q = {}\n",
    "\n",
    "    def policy(self, A, s, Q, epsilon):\n",
    "        return epsilon_greedy_policy(A, s, Q, epsilon)\n",
    "\n",
    "    def learning_method(self, gamma = 0.9, alpha = 0.1, epsilon = 1e-5, display = False, lambda_ = None):\n",
    "        self.state = self.env.reset()\n",
    "        s0 = self.state\n",
    "        if display:\n",
    "            self.env.render()\n",
    "        a0 = self.perform_policy(s0, self.Q, epsilon)\n",
    "        # print(self.action_t.name)\n",
    "        time_in_episode, total_reward = 0, 0\n",
    "        is_done = False\n",
    "        while not is_done:\n",
    "            # add code here\n",
    "            s1, r1, is_done, info, total_reward = self.act(a0)\n",
    "            if display:\n",
    "                self.env.render()\n",
    "            a1 = self.perform_policy(s1, self.Q, epsilon)\n",
    "            old_q = get_dict(self.Q, s0, a0)\n",
    "            q_prime = get_dict(self.Q, s1, a1)\n",
    "            td_target = r1 + gamma * q_prime\n",
    "            #alpha = alpha / num_episode\n",
    "            new_q = old_q + alpha * (td_target - old_q)\n",
    "            set_dict(self.Q, new_q, s0, a0)\n",
    "            s0, a0 = s1, a1\n",
    "            time_in_episode += 1\n",
    "        if display:\n",
    "            print(self.experience.last_episode)\n",
    "        return time_in_episode, total_reward  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 800/800 [00:00<00:00, 1230.20it/s]\n"
     ]
    }
   ],
   "source": [
    "env = WindyGridWorld()\n",
    "agent = SarsaAgent(env, capacity = 10000)\n",
    "\n",
    "statistics = agent.learning(gamma = 1.0, \n",
    "                            epsilon = 1,\n",
    "                            decaying_epsilon = True,\n",
    "                            alpha = 0.5, \n",
    "                            max_episode_num = 800, \n",
    "                            display = False)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "episode 801    19 steps,total reward:-18.00  \n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(19, -18)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "agent.learning_method(epsilon = 0.01, display = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "learning_curve(statistics, 0,2)\n",
    "# 坐标中文显示不友好"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "env.reset()\n",
    "env.render()\n",
    "#env.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "env.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
